<?php

/**
 * unos actions.
 *
 * @package    dnevnik
 * @subpackage unos
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
 */
class unosActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeUnos(sfWebRequest $request)
  {
      $razreds = RazredPeer::razrediOperaterList($request->getParameter('skola_id'), $this->getUser());

      $sel = "<select id='razred_id' name='razred_id' onchange='ucenikList(this.value)'>";
      foreach($razreds as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      $this->razred_sel = $sel;
  }

  public function executeGrupni(sfWebRequest $request)
  {
      $razreds = RazredPeer::razrediOperaterList($request->getParameter('skola_id'), $this->getUser());

      $sel = "<select id='razred_id' name='razred_id' onchange='predmetList(this.value)'>";
      foreach($razreds as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      $this->razred_sel = $sel;
  }

  public function executeObavestenja(sfWebRequest $request)
  {
      $razreds = RazredPeer::razrediOperaterList($request->getParameter('skola_id'), $this->getUser());

      $sel = "<select id='razred_id' name='razred_id' onchange='mail_dodaj_razred(this.value)'>";
      foreach($razreds as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      $this->sel = $sel;
  }

  public function executeZakljucne(sfWebRequest $request)
  {
      $razreds = RazredPeer::razrediOperaterList($request->getParameter('skola_id'), $this->getUser());

      $sel = "<select id='razred_id' name='razred_id' onchange='ucenikZakljucneList(this.value)'>";
      foreach($razreds as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      $this->razred_sel = $sel;
  }

  public function executeStare(sfWebRequest $request)
  {
      $razreds = RazredPeer::razrediOperaterList($request->getParameter('skola_id'), $this->getUser());

      $sel = "<select id='razred_id' name='razred_id' onchange='ucenikStareList(this.value)'>";
      foreach($razreds as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      $this->razred_sel = $sel;
  }

  public function executeObrazac(sfWebRequest $request)
  {
      $razreds = RazredPeer::razrediOperaterList($request->getParameter('skola_id'), $this->getUser());

      $sel = "<select id='razred_id' name='razred_id'>";
      foreach($razreds as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      $this->razred_sel = $sel;
  }

  public function executeTabelaUnos(sfWebRequest $request)
  {
     set_time_limit(3600);
     ini_set('memory_limit', '1000M');
     if($razred_id = $request->getParameter('razred_id'))
     {
        $razred = DbFinder::from('Razred')->with('Skola')->findPk($razred_id);
        $razreds = array($razred);
        $tip_obrasca = $razred->getSkola()->getTipObrasca();
     }

     else if($skola_id = $request->getParameter('skola_id'))
     {
        $razreds = DbFinder::from('Razred')->join('Smer')->where('Razred.SkolaId', $skola_id)->where('Smer.Tip', SmerPeer::$tip['redovni'])->orderBy('Razred.Razred')->orderBy('Razred.Slovo')->find();
        $tip_obrasca = DbFinder::from('Skola')->select('TipObrasca')->findPk($skola_id);
     }

     $tabela = new TabelaZaUnos($razreds, $tip_obrasca);
     $pdf = $tabela->pdf();

     $this->getResponse()->setContentType('application/pdf');
     $this->getResponse()->setHttpHeader('Pragma', 'no-cache');
     $this->getResponse()->setHttpHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0');

     $pdf->Output();
     return sfView::NONE;
  }

  public function executeUcenikList(sfWebRequest $request)
  {
      $ucenik_dbs = UcenikPeer::getJoin()->with('Roditelj')->where('Razred.Id', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
      $uceniks = array('' => array('Izaberi učenika', ''));
      $date = date('Y-m-d');
      foreach($ucenik_dbs as $ucenik_db)
      {
        $date_azuriran = date('Y-m-d', $ucenik_db->getAzuriran());
        if(Functions::clanarina($ucenik_db->getRoditelj()) and $date_azuriran < $date)
          $class = 'neazuriran';
        else if($date_azuriran >= $date)
          $class = 'azuriran';
        else $class = '';
        $uceniks[$ucenik_db->getId()] = array($ucenik_db->getRedBr().' - '.$ucenik_db->joinIme(), $class);
      }
      $sel = "<select id='ucenik_id' name='ucenik_id' onchange='dnevnik(this.value)'>";
      foreach($uceniks as $id => $uc_ar)
      {
        list($ime, $class) =  $uc_ar;
        $sel .= "<option value='$id' class='$class'>$ime</option>";
      }
      $sel .= "</select>";

      return $this->renderText($sel);
  }

  public function executeUcenikStareList(sfWebRequest $request)
  {
      $ucenik_dbs = UcenikPeer::getJoin()->where('Razred.Id', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
      $uceniks = array('' => 'Izaberi ucenika');
      foreach($ucenik_dbs as $ucenik_db)
        $uceniks[$ucenik_db->getId()] = $ucenik_db->getRedBr().' - '.$ucenik_db->joinIme();
      $sel = "<select id='ucenik_id' name='ucenik_id' onchange='dnevnikStare(this.value)'>";
      foreach($uceniks as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      return $this->renderText($sel);
  }

  public function executeUcenikZakljucneList(sfWebRequest $request)
  {
      $ucenik_dbs = UcenikPeer::getJoin()->where('Razred.Id', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
      $uceniks = array('' => 'Izaberi ucenika');
      foreach($ucenik_dbs as $ucenik_db)
        $uceniks[$ucenik_db->getId()] = $ucenik_db->getRedBr().' - '.$ucenik_db->joinIme();
      $sel = "<select id='ucenik_id' name='ucenik_id' onchange='dnevnikZakljucne(this.value)'>";
      foreach($uceniks as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "</select>";

      return $this->renderText($sel);
  }

  public function executeDnevnik(sfWebRequest $request)
  {
      $ucenik = DbFinder::from('Ucenik')->where('RazredId', $request->getParameter('razred_id'))->where('Id', $request->getParameter('ucenik_id'))->findOne();
      $ucenik->setAzuriran(time());
      $ucenik->save();
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $dnevnik = new Dnevnik($ucenik);
      list($this->predmets, $this->izbornis, $grupas) = $dnevnik->getPredmetiUcenika();

      $this->ocenas = $dnevnik->getUcenikOcenas();
      $this->ucenik = $ucenik;
      $this->razred = $razred;
      $this->smer = $razred->getSmer();
  }

  public function executeDnevnikStare(sfWebRequest $request)
  {
      $ucenik = DbFinder::from('Ucenik')->where('RazredId', $request->getParameter('razred_id'))->where('Id', $request->getParameter('ucenik_id'))->findOne();
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $dnevnik = new Dnevnik($ucenik);
      list($this->predmets, $this->izbornis, $grupas) = $dnevnik->getPredmetiUcenika();

      $this->ocenas = $dnevnik->getUcenikOcenas();
      $this->ucenik = $ucenik;
      $this->razred = $razred;
      $this->smer = $razred->getSmer();
  }

  public function executeDnevnikZakljucne(sfWebRequest $request)
  {
      $ucenik = DbFinder::from('Ucenik')->where('RazredId', $request->getParameter('razred_id'))->where('Id', $request->getParameter('ucenik_id'))->findOne();
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $dnevnik = new Dnevnik($ucenik);
      list($this->predmets, $this->izbornis, $grupas) = $dnevnik->getPredmetiUcenika();

      $this->ocenas = $dnevnik->getUcenikOcenas();
      $this->zakljucnas = $dnevnik->getUcenikZakljucnas();
      $this->ucenik = $ucenik;
      $this->razred = $razred;
      $this->smer = $razred->getSmer();
      $this->period = Functions::periodZakljucna();
  }

  public function executeDnevnikUnos(sfWebRequest $request)
  {
      $razred_id = $request->getParameter('razred_id');
      $ucenik_id = $request->getParameter('ucenik_id');
      $strs = $request->getParameter('str');
      if(isset($strs[1]))
      {
      $str_arrs = explode('_*_', $strs);
      foreach($str_arrs as $str)
      {
          $ocena_ar = explode(',', $str);
          $ocena = new Ocena();
          $ocena->setRazredId($razred_id);
          $ocena->setPredmetId($ocena_ar[0]);
          $ocena->setPeriod(Functions::period());
          $ocena->setUcenikId($ucenik_id);
          $ocena->setOcena($ocena_ar[1]);
          $ocena->setOpis($ocena_ar[2]);
          $ocena->save();

          Functions::sendSms($ucenik_id, $ocena_ar[1], 'ocena', $ocena_ar[2], $ocena_ar[0]);
      }
      }

      $str_ops = $request->getParameter('str_op');
      if(isset($str_ops[1]))
      {
      $str_op_arrs = explode('_*_', $str_ops);
      foreach($str_op_arrs as $str_op)
      {
          $ocena_ar = explode(',', $str_op);
          $ocena = new Ocena();
          $ocena->setRazredId($razred_id);
          $ocena->setPredmetId($ocena_ar[0]);
          $ocena->setPeriod(Functions::period());
          $ocena->setUcenikId($ucenik_id);
          $ocena->setOcena($ocena_ar[1]);
          $ocena->setOpis($ocena_ar[2]);
          $ocena->save();

          Functions::sendSms($ucenik_id, $ocena_ar[1], 'opisna', $ocena_ar[2], $ocena_ar[0]);
      }
      }

      return $this->renderText("Sačuvano");
  }

  public function executeStareUnos(sfWebRequest $request)
  {
      $razred_id = $request->getParameter('razred_id');
      $ucenik_id = $request->getParameter('ucenik_id');
      $strs = $request->getParameter('str');
      if(isset($strs[1]))
      {
      $str_arrs = explode('_*_', $strs);
      foreach($str_arrs as $str)
      {
          $ocena_ar = explode(',', $str);
          $brojac = 0;
          while($brojac ++ < strlen($ocena_ar[1]))
          {
             $ocena = new Ocena();
             $ocena->setRazredId($razred_id);
             $ocena->setPredmetId($ocena_ar[0]);
             $ocena->setPeriod(Functions::period());
             $ocena->setUcenikId($ucenik_id);
             $ocena->setOcena($ocena_ar[1][($brojac - 1)]);
             $ocena->setOpis($ocena_ar[2]);
             $ocena->save();
          }

          //Functions::sendSms($ucenik_id, $ocena_ar[1], 'ocena', $ocena_ar[2], $ocena_ar[0]);
      }
      }

      $str_ops = $request->getParameter('str_op');
      if(isset($str_ops[1]))
      {
      $str_op_arrs = explode('_*_', $str_ops);
      foreach($str_op_arrs as $str_op)
      {
          $ocena_ar = explode(',', $str_op);
          $ocena = new Ocena();
          $ocena->setRazredId($razred_id);
          $ocena->setPredmetId($ocena_ar[0]);
          $ocena->setPeriod(Functions::period());
          $ocena->setUcenikId($ucenik_id);
          $ocena->setOcena($ocena_ar[1]);
          $ocena->setOpis($ocena_ar[2]);
          $ocena->save();

          //Functions::sendSms($ucenik_id, $ocena_ar[1], 'opisna', $ocena_ar[2], $ocena_ar[0]);
      }
      }

      return $this->renderText("Sačuvano");
  }

  public function executeDnevnikZakljucneUnos(sfWebRequest $request)
  {
      $razred_id = $request->getParameter('razred_id');
      $ucenik_id = $request->getParameter('ucenik_id');
      $strs = explode('_*_', $request->getParameter('str'));
      foreach($strs as $str)
      {
          $ocena_ar = explode(',', $str);
          $zakljucna = new Zakljucna();
          $zakljucna->setRazredId($razred_id);
          $zakljucna->setPredmetId($ocena_ar[0]);
          $zakljucna->setPeriod(Functions::periodZakljucna());
          $zakljucna->setUcenikId($ucenik_id);
          $zakljucna->setOcena($ocena_ar[1]);
          $zakljucna->setOpis($ocena_ar[2]);
          $zakljucna->save();
      }

      return $this->renderText("Sačuvano");
  }

  public function executePredmetList(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->findPk($request->getParameter('razred_id'));
      $predmets = $razred->getPredmets(0);
      $sel = "<select id='predmet_id' name='predmet_id' onchange='grupniDnevnik(this.value)'>";
      foreach($predmets as $id => $ime)
        $sel .= "<option value='$id'>$ime</option>";
      $sel .= "<option value='23'>Vladanje</option>";
      $sel .= "</select>";

      return $this->renderText($sel);
  }

  public function executeGrupniDnevnik(sfWebRequest $request)
  {
      $predmet = DbFinder::from('Predmet')->findPk($request->getParameter('predmet_id'));
      $razred = DbFinder::from('Razred')->join('Smer')->with('Smer')->findPk($request->getParameter('razred_id'));
      $smer = $razred->getSmer();
      $predmet_smers = DbFinder::from('PredmetSmer')->select('PredmetId')->where('SmerId', $smer->getId())->find();
      if(in_array($predmet->getId(), $predmet_smers) or $predmet->getId() == $razred->getJezik() or $predmet->getId() == 23)
        $uceniks = UcenikPeer::getJoin()->with('Roditelj')->where('RazredId', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
      else
      {
          $grupa_ids = DbFinder::from('Razred')->join('Smer')->select('Id')->where('Razred.SkolaId', $razred->getSkolaId())->where('Smer.Naziv', $predmet->getPredmet())->find();
          $uceniks = UcenikPeer::getJoin()->innerJoin('Ucenik.Id', 'UcenikRazred.UcenikId')->with('Roditelj')->where('Ucenik.RazredId', $request->getParameter('razred_id'))->where('UcenikRazred.RazredId', 'in', $grupa_ids)->orderBy('RedBr')->find();
      }

      $this->period = Functions::period();
      $this->uceniks = $uceniks;
      $this->ocenas = Dnevnik::getRazredPredmetOcenas($razred->getId(), $predmet->getId());
      $this->predmet = $predmet;
      $this->razred = $razred;

      if(!in_array($predmet->getId(), Functions::$opisni_predmeti[$smer->getNaziv()]))
        return 'Brojcano';
      else return 'Opisno';
  }

  public function executeUnosGrupnih(sfWebRequest $request)
  {
      $predmet_id = $request->getParameter('predmet_id');
      // UNOS VLADANJA IDE U ZAKLJUCNE - glupi hack
      if($predmet_id == 23)
      {
         $strs = explode('_*_', $request->getParameter('str'));
         foreach($strs as $str)
         {
             $ocena_ar = explode(',', $str);
             $ocena = new Zakljucna();
             $ocena->setRazredId($request->getParameter('razred_id'));
             $ocena->setPredmetId($predmet_id);
             $ocena->setPeriod(1);
             $ocena->setUcenikId($ocena_ar[0]);
             $ocena->setOcena($ocena_ar[1]);
             $ocena->save();
         }
         return($this->renderText('Sačuvano!'));
      }


      if(!$obrazlozenje = $request->getParameter('obrazlozenje'))
        $obrazlozenje = '';
      $strs = explode('_*_', $request->getParameter('str'));
      foreach($strs as $str)
      {
          $ocena_ar = explode(',', $str);
          $ocena = new Ocena();
          $ocena->setRazredId($request->getParameter('razred_id'));
          $ocena->setPredmetId($predmet_id);
          $ocena->setPeriod($request->getParameter('period'));
          $ocena->setUcenikId($ocena_ar[0]);
          $ocena->setOcena($ocena_ar[1]);
          if($ocena_ar[2])
            $ocena->setOpis($ocena_ar[2]);
          else $ocena->setOpis($obrazlozenje);
          $ocena->save();

          Functions::sendSms($ocena_ar[0], $ocena_ar[1], 'ocena', $ocena_ar[2], $predmet_id);
      }
      return($this->renderText('Sačuvano!'));
  }

  public function executeUnosOpisnihGrupnih(sfWebRequest $request)
  {
      $predmet_id = $request->getParameter('predmet_id');
      $strs = explode('_*_', $request->getParameter('str'));
      foreach($strs as $str)
      {
          $ocena_ar = explode(',', $str);
          $ocena = new Ocena();
          $ocena->setPredmetId($predmet_id);
          $ocena->setPeriod($request->getParameter('period'));
          $ocena->setUcenikId($ocena_ar[0]);
          $ocena->setRazredId($ocena_ar[1]);
          $ocena->setOpis($ocena_ar[2]);
          $ocena->save();

          Functions::sendSms($ocena_ar[0], '', 'opisna', $ocena_ar[2], $predmet_id);
      }
      return($this->renderText('Sačuvano!'));
  }

  public function executeCheckboxList(sfWebRequest $request)
  {
      $razred = DbFinder::from('Razred')->findPk($request->getParameter('razred_id'));
      $ucenik_dbs = UcenikPeer::getJoin()->where('Razred.Id', $request->getParameter('razred_id'))->orderBy('RedBr')->find();
      $uceniks = array();
      foreach($ucenik_dbs as $ucenik_db)
        $uceniks[$ucenik_db->getId()] = $ucenik_db->getRedBr().'. '.mb_substr($ucenik_db->joinIme(), 0, 15, 'UTF-8');

      $this->razred = $razred;
      $this->uceniks = $uceniks;
  }

  public function executeSendMail(sfWebRequest $request)
  {
      $obavestenje = new Obavestenje();
      $obavestenje->setSkolaId($request->getParameter('skola_id'));
      $obavestenje->setUcenikIds($request->getParameter('ucenik_ids'));
      $obavestenje->setNaslov($request->getParameter('naslov'));
      $obavestenje->setContent($request->getParameter('content'));
      $obavestenje->save();

      $ucenik_ids = explode('||', $request->getParameter('ucenik_ids'));
      foreach($ucenik_ids as $ucenik_id)
         Functions::sendSms($ucenik_id, $request->getParameter('naslov'), 'obavestenje', $request->getParameter('content'));

      return $this->renderText("Poruka je poslata!");
  }

  public function executeDomaci(sfWebRequest $request)
  {
     $razred = DbFinder::from('Razred')->findPk($request->getParameter('razred_id'));
     $predmets = $razred->getPredmetFulls(0);
     unset($predmets[0]);

     $this->razred = $razred;
     $this->predmets = $predmets;
  }

  public function executeIzostanci(sfWebRequest $request)
  {
     $razred = DbFinder::from('Razred')->findPk($request->getParameter('razred_id'));
     $datum = $request->getParameter('datum');

     $datum_danas = Functions::datumEn($datum);
     $datum_sutra = strtotime($datum_danas." +1 day");

     $uceniks = UcenikPeer::getJoin()->where('RazredId', $razred->getId())->orderBy('RedBr')->orderBy('Prezime')->orderBy('Ime')->find();
     $izostanak_dbs = DbFinder::from('Izostanak')->leftJoin('Ucenik')->where('Ucenik.RazredId', $razred->getId())->where('Izostanak.Datum', '>=', $datum_danas)->where('Izostanak.Datum', '<', $datum_sutra)->find();
     $izostanaks = array();
     foreach($izostanak_dbs as $izostanak_db)
      $izostanaks[$izostanak_db->getUcenikId()][$izostanak_db->getCas()] = $izostanak_db;

     $this->datum = $datum;
     $this->razred = $razred;
     $this->uceniks = $uceniks;
     $this->izostanaks = $izostanaks;
  }

  public function executeDomaciUnos(sfWebRequest $request)
  {
     $razred_id = $request->getParameter('razred_id');
     $razred = DbFinder::from('Razred')->findPk($razred_id);
     $uceniks = $razred->getUcenikIds();

     $strs = explode('_*_', $request->getParameter('str'));
     foreach($strs as $str)
     {
        $domaci_ar = explode(',', $str);
        $predmet_id = $domaci_ar[0];
        $opis = $domaci_ar[1];

        $domaci = new Domaci();
        $domaci->setPredmetId($predmet_id);
        $domaci->setRazredId($razred_id);
        $domaci->setOpis($opis);
        $domaci->save();

        foreach($uceniks as $ucenik_id)
          Functions::sendSms($ucenik_id, $opis, 'domaci', '', $predmet_id);
     }

     return ($this->renderText('Domaći zadaci su sačuvani'));
  }

}